home *** CD-ROM | disk | FTP | other *** search
/ Varios Español / Varios Español.iso / DBASE5 / CUA_SAMP.ZIP / PUZZLE.PRG < prev    next >
Text File  |  1994-10-12  |  23KB  |  800 lines

  1. *.............................................................................
  2. *
  3. *   Program Name: PUZZLE.PRG          Copyright: Borland International
  4. *   Date Created: 04/29/94            Language:  dBASE 5.0
  5. *   Time Created: 10:45:31
  6. *.............................................................................
  7.  
  8. #define ALLTRIM(kStr) LTRIM(RTRIM(kStr))
  9.  
  10. #define kbDown  20480
  11. #define kbLeft  19200
  12. #define kbRight 19712
  13. #define kbUp    18432
  14.  
  15. #define kBell CHR(7)
  16.  
  17. *.................................................
  18. * Procedure Name:   Puzzle
  19. * Parameters:       None
  20. * Ext Memvars:      None
  21. * Description:      Main procedure for program
  22. *.................................................
  23. PROCEDURE Puzzle
  24.     PRIVATE lVoid
  25.  
  26.     SET TALK OFF
  27.  
  28.     IF TYPE("Puzzle.ClassName") # "C"
  29.         DO InitPuzz
  30.     ENDIF
  31.  
  32.     IF TYPE("aTile[16,4]") # "N"
  33.         RELEASE aTile
  34.         PUBLIC ARRAY aTile[16,4]
  35.         DO InitAray
  36.     ENDIF
  37.  
  38.     lVoid = Puzzle.Open()
  39. RETURN
  40.  
  41.  
  42. *............................................................................
  43. * Procedure Name:   PrKey
  44. * Parameters:       None
  45. * Ext Memvars:      Puzzle
  46. * Description:      Checks to see if a valid arrow key was pressed.  If so,
  47. *                   calls procedure to move the tile.
  48. *............................................................................
  49. PROCEDURE PrKey
  50.     PRIVATE nKey, nEmp
  51.  
  52.     nKey  = event.KeyValue
  53.     nEmp  = GetEmpty()
  54.  
  55.     IF Puzzle.lPlay
  56.         DO CASE
  57.             CASE nKey = kbUp
  58.                 IF nEmp < 13
  59.                     DO MoveTile WITH nEmp + 4, nEmp
  60.                 ELSE
  61.                     ?? kBell
  62.                 ENDIF
  63.             CASE nKey = kbDown
  64.                 IF nEmp > 4
  65.                     DO MoveTile WITH nEmp - 4, nEmp
  66.                 ELSE
  67.                     ?? kBell
  68.                 ENDIF
  69.             CASE nKey = kbRight
  70.                 IF (nEmp # 1) .AND. (nEmp # 5) .AND. (nEmp # 9) .AND. (nEmp # 13)
  71.                     DO MoveTile WITH nEmp - 1, nEmp
  72.                 ELSE
  73.                     ?? kBell
  74.                 ENDIF
  75.             CASE nKey = kbLeft
  76.                 IF (nEmp # 4) .AND. (nEmp # 8) .AND. (nEmp # 12) .AND. (nEmp # 16)
  77.                     DO MoveTile WITH nEmp + 1, nEmp
  78.                 ELSE
  79.                     ?? kBell
  80.                 ENDIF
  81.         ENDCASE
  82.     ENDIF
  83. RETURN
  84.  
  85.  
  86. *............................................................................
  87. * Procedure Name:   PrClick
  88. * Parameters:       None
  89. * Ext Memvars:      Puzzle
  90. * Return Value:     .F.
  91. * Description:      Checks to see if mouse click was made on a valid tile.
  92. *                   If so, calls procedure to move the tile.
  93. *............................................................................
  94. PROCEDURE PrClick
  95.     PRIVATE nEmp, nCol, nRow, nTile
  96.  
  97.     nCol = event.MouseColumn
  98.     nRow = event.MouseRow
  99.  
  100.     nTile = 0
  101.     nEmp  = GetEmpty()
  102.  
  103.     IF Puzzle.lPlay
  104.         DO CASE
  105.             CASE (nRow >= 1) .AND. (nRow <= 3)
  106.                 DO CASE
  107.                     CASE (nCol >=  1) .AND. (nCol <=  6)
  108.                         nTile = 1
  109.                     CASE (nCol >=  7) .AND. (nCol <= 12)
  110.                         nTile = 2
  111.                     CASE (nCol >= 13) .AND. (nCol <= 18)
  112.                         nTile = 3
  113.                     CASE (nCol >= 19) .AND. (nCol <= 24)
  114.                         nTile = 4
  115.                 ENDCASE
  116.             CASE (nRow >= 4) .AND. (nRow <= 6)
  117.                 DO CASE
  118.                     CASE (nCol >=  1) .AND. (nCol <=  6)
  119.                         nTile = 5
  120.                     CASE (nCol >=  7) .AND. (nCol <= 12)
  121.                         nTile = 6
  122.                     CASE (nCol >= 13) .AND. (nCol <= 18)
  123.                         nTile = 7
  124.                     CASE (nCol >= 19) .AND. (nCol <= 24)
  125.                         nTile = 8
  126.                 ENDCASE
  127.             CASE (nRow >= 7) .AND. (nRow <= 9)
  128.                 DO CASE
  129.                     CASE (nCol >=  1) .AND. (nCol <=  6)
  130.                         nTile = 9
  131.                     CASE (nCol >=  7) .AND. (nCol <= 12)
  132.                         nTile = 10
  133.                     CASE (nCol >= 13) .AND. (nCol <= 18)
  134.                         nTile = 11
  135.                     CASE (nCol >= 19) .AND. (nCol <= 24)
  136.                         nTile = 12
  137.                 ENDCASE
  138.             CASE (nRow >= 10) .AND. (nRow <= 12)
  139.                 DO CASE
  140.                     CASE (nCol >=  1) .AND. (nCol <=  6)
  141.                         nTile = 13
  142.                     CASE (nCol >=  7) .AND. (nCol <= 12)
  143.                         nTile = 14
  144.                     CASE (nCol >= 13) .AND. (nCol <= 18)
  145.                         nTile = 15
  146.                     CASE (nCol >= 19) .AND. (nCol <= 24)
  147.                         nTile = 16
  148.                 ENDCASE
  149.         ENDCASE
  150.  
  151.         IF nEmp > 0
  152.             IF (nEmp = nTile - 1) .OR. (nEmp = nTile + 1) .OR. (nEmp = nTile - 4) .OR. (nEmp = nTile + 4)
  153.                 DO MoveTile WITH nTile, nEmp
  154.             ENDIF
  155.         ENDIF
  156.     ENDIF
  157.  
  158.     event.eventType = 0     && always eat the mouse event
  159.  
  160. RETURN
  161.  
  162.  
  163. *............................................................
  164. * Procedure Name:   MoveTile
  165. * Parameters:       Tile to move, Empty tile
  166. * Ext Memvars:      Puzzle
  167. * Description:      Moves the <Tile to move> to <Empty tile>
  168. *............................................................
  169. PROCEDURE MoveTile
  170. PARAMETERS n, nEmp
  171.     PRIVATE oRef
  172.  
  173.     IF TYPE("aTile[n,1]") = "O"
  174.         aTile[nEmp,1] = aTile[n,1]
  175.         aTile[nEmp,2] = aTile[n,2]
  176.         aTile[n,1] = .F.
  177.         aTile[n,2] = .F.
  178.  
  179.         Puzzle.Draw = .F.
  180.  
  181.         oRef      = aTile[nEmp,1]
  182.         oRef.Left = aTile[nEmp,3]
  183.         oRef.Top  = aTile[nEmp,4]
  184.  
  185.         oRef      = aTile[nEmp,2]
  186.         oRef.Left = aTile[nEmp,3] + 2
  187.         oRef.Top  = aTile[nEmp,4] + 1
  188.  
  189.         Puzzle.Draw = .T.
  190.  
  191.         Puzzle.nMoves = Puzzle.nMoves + 1
  192.         Puzzle.Tc.Text = TRANSFORM(Puzzle.nMoves, "9,999")
  193.  
  194.         IF ChkDone()
  195.             DO UWon
  196.             SET TALK OFF
  197.         ENDIF
  198.     ENDIF
  199. RETURN
  200.  
  201.  
  202. *............................................................................
  203. * Function Name:    ChkDone
  204. * Parameters:       None
  205. * Ext Memvars:      None
  206. * Return Value:     logical, .T. if puzzle complete, .F. otherwise
  207. * Description:      checks to see if all tiles are in the right order
  208. *............................................................................
  209. FUNCTION ChkDone
  210.     PRIVATE lRet, i, cStr, oRef
  211.  
  212.     lRet = .T.
  213.  
  214.     FOR i = 1 TO 16
  215.         oRef = aTile[i,1]
  216.         IF TYPE("oRef.ClassName") = "C"
  217.             cStr = ALLTRIM(oRef.Name) + ""
  218.             cStr = RIGHT(cStr, LEN(cStr) - 1)
  219.             IF VAL(cStr) # i
  220.                 lRet = .F.
  221.                 EXIT
  222.             ENDIF
  223.         ENDIF
  224.     ENDFOR
  225. RETURN lRet
  226.  
  227.  
  228. *.................................................
  229. * Procedure Name:   UWon
  230. * Parameters:       None
  231. * Ext Memvars:      None
  232. * Description:      Displays a winning message
  233. *.................................................
  234. PROCEDURE UWon
  235.     PRIVATE lVoid
  236.  
  237.     SET TALK OFF
  238.  
  239.     DEFINE FORM UWon;
  240.         PROPERTY ;
  241.             HEIGHT   9,;
  242.             LEFT    22,;
  243.             TEXT   "Ganador",;
  244.             TOP      6,;
  245.             WIDTH   28
  246.  
  247.     DEFINE TEXT T1 OF UWon;
  248.         PROPERTY ;
  249.             LABEL .F.,;
  250.             LEFT   5,;
  251.             TEXT  "¡Felicidades!",;
  252.             TOP    1
  253.  
  254.     DEFINE TEXT T2 OF UWon;
  255.         PROPERTY ;
  256.             LABEL .F.,;
  257.             LEFT   1,;
  258.             TEXT  "Ha terminado el puzzle",;
  259.             TOP    3
  260.  
  261.     DEFINE PUSHBUTTON B OF UWON;
  262.         PROPERTY ;
  263.             DEFAULT .T.,;
  264.             LEFT      8,;
  265.             ONCLICK  PrOK,;
  266.             TEXT    "&Aceptar",;
  267.             TOP       5,;
  268.             WIDTH    10
  269.  
  270.     lVoid = UWon.ReadModal()
  271.     lVoid = UWon.Release()
  272.     RELEASE UWon
  273.  
  274.     Puzzle.lPlay = .F.
  275. RETURN
  276.  
  277.  
  278. *.................................................
  279. * Procedure Name:   PrOK
  280. * Parameters:       None
  281. * Ext Memvars:      None
  282. * Description:      Button handler for UWon
  283. *.................................................
  284. PROCEDURE PrOK
  285.     PRIVATE lVoid
  286.  
  287.     lVoid = UWon.Close()
  288. RETURN
  289.  
  290.  
  291. *.................................................
  292. * Procedure Name:   Shuffle
  293. * Parameters:       None
  294. * Ext Memvars:      Puzzle
  295. * Description:      Shuffles tiles on Puzzle
  296. *.................................................
  297. PROCEDURE Shuffle
  298.     PRIVATE cRnd, i, n, nLen, nEmp, oRef, lVoid
  299.  
  300.     cRnd = ALLTRIM(STR(INT(RAND() * 10000000000000000), 16, 0))
  301.  
  302.     nLen = LEN(cRnd)
  303.  
  304.     FOR i = 1 TO nLen
  305.         n = VAL(SUBSTR(cRnd, i, 1))
  306.         IF n = 0
  307.             IF (i/2) = (INT(i/2))
  308.                 n = 10
  309.             ELSE
  310.                 n = 14
  311.             ENDIF
  312.         ENDIF
  313.  
  314.         nEmp = GetEmpty()
  315.         IF nEmp > 0
  316.             IF TYPE("aTile[n,1]") = "O"
  317.                 aTile[nEmp,1] = aTile[n,1]
  318.                 aTile[nEmp,2] = aTile[n,2]
  319.                 aTile[n,1] = .F.
  320.                 aTile[n,2] = .F.
  321.             ENDIF
  322.         ENDIF
  323.     ENDFOR
  324.  
  325.     Puzzle.Draw = .F.
  326.  
  327.     FOR i = 1 TO 16
  328.         IF TYPE("aTile[i,1]") = "O"
  329.             oRef      = aTile[i,1]
  330.             oRef.Left = aTile[i,3]
  331.             oRef.Top  = aTile[i,4]
  332.  
  333.             oRef      = aTile[i,2]
  334.             oRef.Left = aTile[i,3] + 2
  335.             oRef.Top  = aTile[i,4] + 1
  336.         ENDIF
  337.     ENDFOR
  338.  
  339.     Puzzle.Draw  = .T.
  340.     Puzzle.lPlay = .T.
  341.  
  342.     Puzzle.nMoves = 0
  343.     Puzzle.Tc.Text = TRANSFORM(0, "9,999")
  344. RETURN
  345.  
  346.  
  347. *............................................................................
  348. * Function Name:    GetEmpty
  349. * Parameters:       None
  350. * Ext Memvars:      None
  351. * Return Value:     numeric, number of tile that is currently empty
  352. * Description:      determines which tile is currently empty
  353. *............................................................................
  354. FUNCTION GetEmpty
  355.     PRIVATE nRet, i
  356.  
  357.     nRet = 0
  358.  
  359.     FOR i = 1 TO 16
  360.         IF TYPE("aTile[i,1]") = "L"
  361.             nRet = i
  362.             EXIT
  363.         ENDIF
  364.     ENDFOR
  365. RETURN nRet
  366.  
  367.  
  368. *...............................................................
  369. * Procedure Name:   InitAray
  370. * Parameters:       None
  371. * Ext Memvars:      None
  372. * Description:      Initializes the global array used by Puzzle
  373. *...............................................................
  374. PROCEDURE InitAray
  375.     PRIVATE i
  376.  
  377.     aTile[1,1]  = Puzzle.R1
  378.     aTile[2,1]  = Puzzle.R2
  379.     aTile[3,1]  = Puzzle.R3
  380.     aTile[4,1]  = Puzzle.R4
  381.     aTile[5,1]  = Puzzle.R5
  382.     aTile[6,1]  = Puzzle.R6
  383.     aTile[7,1]  = Puzzle.R7
  384.     aTile[8,1]  = Puzzle.R8
  385.     aTile[9,1]  = Puzzle.R9
  386.     aTile[10,1] = Puzzle.R10
  387.     aTile[11,1] = Puzzle.R11
  388.     aTile[12,1] = Puzzle.R12
  389.     aTile[13,1] = Puzzle.R13
  390.     aTile[14,1] = Puzzle.R14
  391.     aTile[15,1] = Puzzle.R15
  392.     aTile[16,1] = .F.
  393.  
  394.     aTile[1,2]  = Puzzle.T1
  395.     aTile[2,2]  = Puzzle.T2
  396.     aTile[3,2]  = Puzzle.T3
  397.     aTile[4,2]  = Puzzle.T4
  398.     aTile[5,2]  = Puzzle.T5
  399.     aTile[6,2]  = Puzzle.T6
  400.     aTile[7,2]  = Puzzle.T7
  401.     aTile[8,2]  = Puzzle.T8
  402.     aTile[9,2]  = Puzzle.T9
  403.     aTile[10,2] = Puzzle.T10
  404.     aTile[11,2] = Puzzle.T11
  405.     aTile[12,2] = Puzzle.T12
  406.     aTile[13,2] = Puzzle.T13
  407.     aTile[14,2] = Puzzle.T14
  408.     aTile[15,2] = Puzzle.T15
  409.     aTile[16,2] = .F.
  410.  
  411.     aTile[1,3]  = Puzzle.R1.Left
  412.     aTile[2,3]  = Puzzle.R2.Left
  413.     aTile[3,3]  = Puzzle.R3.Left
  414.     aTile[4,3]  = Puzzle.R4.Left
  415.     aTile[5,3]  = Puzzle.R5.Left
  416.     aTile[6,3]  = Puzzle.R6.Left
  417.     aTile[7,3]  = Puzzle.R7.Left
  418.     aTile[8,3]  = Puzzle.R8.Left
  419.     aTile[9,3]  = Puzzle.R9.Left
  420.     aTile[10,3] = Puzzle.R10.Left
  421.     aTile[11,3] = Puzzle.R11.Left
  422.     aTile[12,3] = Puzzle.R12.Left
  423.     aTile[13,3] = Puzzle.R13.Left
  424.     aTile[14,3] = Puzzle.R14.Left
  425.     aTile[15,3] = Puzzle.R15.Left
  426.     aTile[16,3] = Puzzle.R15.Left + 6
  427.  
  428.     aTile[1,4]  = Puzzle.R1.Top
  429.     aTile[2,4]  = Puzzle.R2.Top
  430.     aTile[3,4]  = Puzzle.R3.Top
  431.     aTile[4,4]  = Puzzle.R4.Top
  432.     aTile[5,4]  = Puzzle.R5.Top
  433.     aTile[6,4]  = Puzzle.R6.Top
  434.     aTile[7,4]  = Puzzle.R7.Top
  435.     aTile[8,4]  = Puzzle.R8.Top
  436.     aTile[9,4]  = Puzzle.R9.Top
  437.     aTile[10,4] = Puzzle.R10.Top
  438.     aTile[11,4] = Puzzle.R11.Top
  439.     aTile[12,4] = Puzzle.R12.Top
  440.     aTile[13,4] = Puzzle.R13.Top
  441.     aTile[14,4] = Puzzle.R14.Top
  442.     aTile[15,4] = Puzzle.R15.Top
  443.     aTile[16,4] = Puzzle.R15.Top
  444. RETURN
  445.  
  446.  
  447. *...................................................................
  448. * Procedure Name:   PuzCls
  449. * Parameters:       None
  450. * Ext Memvars:      Puzzle
  451. * Description:      OnClose handler for Puzzle, releases everything
  452. *...................................................................
  453. PROCEDURE PuzCls
  454.     PRIVATE lVoid
  455.  
  456.     lVoid = Puzzle.Release()
  457.     RELEASE aTile, Puzzle
  458. RETURN
  459.  
  460.  
  461. *........................................................
  462. * Procedure Name:   InitPuzz
  463. * Parameters:       None
  464. * Ext Memvars:      None
  465. * Description:      Defines the puzzle and its resources
  466. *........................................................
  467. PROCEDURE InitPuzz
  468.     DEFINE FORM Puzzle;
  469.         PROPERTY ;
  470.             HEIGHT  19,;
  471.             KEY     PrKey,;
  472.             LEFT     1,;
  473.             ONCLICK PrClick,;
  474.             ONCLOSE PuzCls,;
  475.             TOP      1,;
  476.             WIDTH   28;
  477.             CUSTOM ;
  478.                 nMoves  0,;
  479.                 lPlay  .F.
  480.  
  481.     DEFINE RECTANGLE RBorder OF Puzzle;
  482.         PROPERTY ;
  483.             BORDERSTYLE   1,;
  484.             LEFT          0,;
  485.             HEIGHT       14,;
  486.             TOP           0,;
  487.             WIDTH        26
  488.  
  489.     DEFINE RECTANGLE R1 OF Puzzle;
  490.         PROPERTY ;
  491.             BORDERSTYLE         1,;
  492.             COLORBORDERLOWERED "N/BG",;
  493.             COLORBORDERRAISED  "W+/BG",;
  494.             COLORNORMAL        "BG/BG",;
  495.             HEIGHT              3,;
  496.             LEFT                1,;
  497.             TOP                 1,;
  498.             WIDTH               6
  499.  
  500.     DEFINE RECTANGLE R2 OF Puzzle;
  501.         PROPERTY ;
  502.             BORDERSTYLE         1,;
  503.             COLORBORDERLOWERED "N/BG",;
  504.             COLORBORDERRAISED  "W+/BG",;
  505.             COLORNORMAL        "BG/BG",;
  506.             HEIGHT              3,;
  507.             LEFT                7,;
  508.             TOP                 1,;
  509.             WIDTH               6
  510.  
  511.     DEFINE RECTANGLE R3 OF Puzzle;
  512.         PROPERTY ;
  513.             BORDERSTYLE          1,;
  514.             COLORBORDERLOWERED "N/BG",;
  515.             COLORBORDERRAISED  "W+/BG",;
  516.             COLORNORMAL        "BG/BG",;
  517.             HEIGHT               3,;
  518.             LEFT                13,;
  519.             TOP                  1,;
  520.             WIDTH                6
  521.  
  522.     DEFINE RECTANGLE R4 OF Puzzle;
  523.         PROPERTY ;
  524.             BORDERSTYLE          1,;
  525.             COLORBORDERLOWERED "N/BG",;
  526.             COLORBORDERRAISED  "W+/BG",;
  527.             COLORNORMAL        "BG/BG",;
  528.             HEIGHT               3,;
  529.             LEFT                19,;
  530.             TOP                  1,;
  531.             WIDTH                6
  532.  
  533.     DEFINE RECTANGLE R5 OF Puzzle;
  534.         PROPERTY ;
  535.             BORDERSTYLE         1,;
  536.             COLORBORDERLOWERED "N/BG",;
  537.             COLORBORDERRAISED  "W+/BG",;
  538.             COLORNORMAL        "BG/BG",;
  539.             HEIGHT              3,;
  540.             LEFT                1,;
  541.             TOP                 4,;
  542.             WIDTH               6
  543.  
  544.     DEFINE RECTANGLE R6 OF Puzzle;
  545.         PROPERTY ;
  546.             BORDERSTYLE         1,;
  547.             COLORBORDERLOWERED "N/BG",;
  548.             COLORBORDERRAISED  "W+/BG",;
  549.             COLORNORMAL        "BG/BG",;
  550.             HEIGHT              3,;
  551.             LEFT                7,;
  552.             TOP                 4,;
  553.             WIDTH               6
  554.  
  555.     DEFINE RECTANGLE R7 OF Puzzle;
  556.         PROPERTY ;
  557.             BORDERSTYLE          1,;
  558.             COLORBORDERLOWERED "N/BG",;
  559.             COLORBORDERRAISED  "W+/BG",;
  560.             COLORNORMAL        "BG/BG",;
  561.             HEIGHT               3,;
  562.             LEFT                13,;
  563.             TOP                  4,;
  564.             WIDTH                6
  565.  
  566.     DEFINE RECTANGLE R8 OF Puzzle;
  567.         PROPERTY ;
  568.             BORDERSTYLE          1,;
  569.             COLORBORDERLOWERED "N/BG",;
  570.             COLORBORDERRAISED  "W+/BG",;
  571.             COLORNORMAL        "BG/BG",;
  572.             HEIGHT               3,;
  573.             LEFT                19,;
  574.             TOP                  4,;
  575.             WIDTH                6
  576.  
  577.     DEFINE RECTANGLE R9 OF Puzzle;
  578.         PROPERTY ;
  579.             BORDERSTYLE         1,;
  580.             COLORBORDERLOWERED "N/BG",;
  581.             COLORBORDERRAISED  "W+/BG",;
  582.             COLORNORMAL        "BG/BG",;
  583.             HEIGHT              3,;
  584.             LEFT                1,;
  585.             TOP                 7,;
  586.             WIDTH               6
  587.  
  588.     DEFINE RECTANGLE R10 OF Puzzle;
  589.         PROPERTY ;
  590.             BORDERSTYLE         1,;
  591.             COLORBORDERLOWERED "N/BG",;
  592.             COLORBORDERRAISED  "W+/BG",;
  593.             COLORNORMAL        "BG/BG",;
  594.             HEIGHT              3,;
  595.             LEFT                7,;
  596.             TOP                 7,;
  597.             WIDTH               6
  598.  
  599.     DEFINE RECTANGLE R11 OF Puzzle;
  600.         PROPERTY ;
  601.             BORDERSTYLE          1,;
  602.             COLORBORDERLOWERED "N/BG",;
  603.             COLORBORDERRAISED  "W+/BG",;
  604.             COLORNORMAL        "BG/BG",;
  605.             HEIGHT               3,;
  606.             LEFT                13,;
  607.             TOP                  7,;
  608.             WIDTH                6
  609.  
  610.     DEFINE RECTANGLE R12 OF Puzzle;
  611.         PROPERTY ;
  612.             BORDERSTYLE          1,;
  613.             COLORBORDERLOWERED "N/BG",;
  614.             COLORBORDERRAISED  "W+/BG",;
  615.             COLORNORMAL        "BG/BG",;
  616.             HEIGHT               3,;
  617.             LEFT                19,;
  618.             TOP                  7,;
  619.             WIDTH                6
  620.  
  621.     DEFINE RECTANGLE R13 OF Puzzle;
  622.         PROPERTY ;
  623.             BORDERSTYLE          1,;
  624.             COLORBORDERLOWERED "N/BG",;
  625.             COLORBORDERRAISED  "W+/BG",;
  626.             COLORNORMAL        "BG/BG",;
  627.             HEIGHT               3,;
  628.             LEFT                 1,;
  629.             TOP                 10,;
  630.             WIDTH                6
  631.  
  632.     DEFINE RECTANGLE R14 OF Puzzle;
  633.         PROPERTY ;
  634.             BORDERSTYLE          1,;
  635.             COLORBORDERLOWERED "N/BG",;
  636.             COLORBORDERRAISED  "W+/BG",;
  637.             COLORNORMAL        "BG/BG",;
  638.             HEIGHT               3,;
  639.             LEFT                 7,;
  640.             TOP                 10,;
  641.             WIDTH                6
  642.  
  643.     DEFINE RECTANGLE R15 OF Puzzle;
  644.         PROPERTY ;
  645.             BORDERSTYLE          1,;
  646.             COLORBORDERLOWERED "N/BG",;
  647.             COLORBORDERRAISED  "W+/BG",;
  648.             COLORNORMAL        "BG/BG",;
  649.             HEIGHT               3,;
  650.             LEFT                13,;
  651.             TOP                 10,;
  652.             WIDTH                6
  653.  
  654.     DEFINE TEXT T1 OF Puzzle;
  655.         PROPERTY ;
  656.             COLORNORMAL "GR+/BG",;
  657.             LABEL       .F.,;
  658.             LEFT         3,;
  659.             TEXT        " 1",;
  660.             TOP          2
  661.  
  662.     DEFINE TEXT T2 OF Puzzle;
  663.         PROPERTY ;
  664.             COLORNORMAL "GR+/BG",;
  665.             LABEL       .F.,;
  666.             LEFT         9,;
  667.             TEXT        " 2",;
  668.             TOP          2
  669.  
  670.     DEFINE TEXT T3 OF Puzzle;
  671.         PROPERTY ;
  672.             COLORNORMAL "GR+/BG",;
  673.             LABEL       .F.,;
  674.             LEFT         15,;
  675.             TEXT        " 3",;
  676.             TOP           2
  677.  
  678.     DEFINE TEXT T4 OF Puzzle;
  679.         PROPERTY ;
  680.             COLORNORMAL "GR+/BG",;
  681.             LABEL       .F.,;
  682.             LEFT         21,;
  683.             TEXT        " 4",;
  684.             TOP           2
  685.  
  686.     DEFINE TEXT T5 OF Puzzle;
  687.         PROPERTY ;
  688.             COLORNORMAL "GR+/BG",;
  689.             LABEL       .F.,;
  690.             LEFT         3,;
  691.             TEXT        " 5",;
  692.             TOP          5
  693.  
  694.     DEFINE TEXT T6 OF Puzzle;
  695.         PROPERTY ;
  696.             COLORNORMAL "GR+/BG",;
  697.             LABEL       .F.,;
  698.             LEFT         9,;
  699.             TEXT        " 6",;
  700.             TOP          5
  701.  
  702.     DEFINE TEXT T7 OF Puzzle;
  703.         PROPERTY ;
  704.             COLORNORMAL "GR+/BG",;
  705.             LABEL       .F.,;
  706.             LEFT         15,;
  707.             TEXT        " 7",;
  708.             TOP           5
  709.  
  710.     DEFINE TEXT T8 OF Puzzle;
  711.         PROPERTY ;
  712.             COLORNORMAL "GR+/BG",;
  713.             LABEL       .F.,;
  714.             LEFT         21,;
  715.             TEXT        " 8",;
  716.             TOP           5
  717.  
  718.     DEFINE TEXT T9 OF Puzzle;
  719.         PROPERTY ;
  720.             COLORNORMAL "GR+/BG",;
  721.             LABEL       .F.,;
  722.             LEFT         3,;
  723.             TEXT        " 9",;
  724.             TOP          8
  725.  
  726.     DEFINE TEXT T10 OF Puzzle;
  727.         PROPERTY ;
  728.             COLORNORMAL "GR+/BG",;
  729.             LABEL       .F.,;
  730.             LEFT         9,;
  731.             TEXT        "10",;
  732.             TOP          8
  733.  
  734.     DEFINE TEXT T11 OF Puzzle;
  735.         PROPERTY ;
  736.             COLORNORMAL "GR+/BG",;
  737.             LABEL       .F.,;
  738.             LEFT         15,;
  739.             TEXT        "11",;
  740.             TOP           8
  741.  
  742.     DEFINE TEXT T12 OF Puzzle;
  743.         PROPERTY ;
  744.             COLORNORMAL "GR+/BG",;
  745.             LABEL       .F.,;
  746.             LEFT         21,;
  747.             TEXT        "12",;
  748.             TOP           8
  749.  
  750.     DEFINE TEXT T13 OF Puzzle;
  751.         PROPERTY ;
  752.             COLORNORMAL "GR+/BG",;
  753.             LABEL       .F.,;
  754.             LEFT         3,;
  755.             TEXT        "13",;
  756.             TOP          11
  757.  
  758.     DEFINE TEXT T14 OF Puzzle;
  759.         PROPERTY ;
  760.             COLORNORMAL "GR+/BG",;
  761.             LABEL       .F.,;
  762.             LEFT         9,;
  763.             TEXT        "14",;
  764.             TOP          11
  765.  
  766.     DEFINE TEXT T15 OF Puzzle;
  767.         PROPERTY ;
  768.             COLORNORMAL "GR+/BG",;
  769.             LABEL       .F.,;
  770.             LEFT         15,;
  771.             TEXT        "15",;
  772.             TOP          11
  773.  
  774.     DEFINE PUSHBUTTON BShuf OF Puzzle;
  775.         PROPERTY ;
  776.             DEFAULT   .F.,;
  777.             GRABFOCUS .F.,;
  778.             LEFT        6,;
  779.             ONCLICK    Shuffle,;
  780.             TABSTOP   .F.,;
  781.             TEXT      "&Empezar",;
  782.             TOP        14,;
  783.             WIDTH      13
  784.  
  785.     DEFINE TEXT Tm OF Puzzle;
  786.         PROPERTY ;
  787.             LABEL .F.,;
  788.             LEFT   8,;
  789.             TEXT  "Movimientos:",;
  790.             TOP    16
  791.  
  792.     DEFINE TEXT Tc OF Puzzle;
  793.         PROPERTY ;
  794.             LABEL .F.,;
  795.             LEFT   20,;
  796.             TEXT   TRANSFORM(0, "9,999"),;
  797.             TOP    16
  798. RETURN
  799.  
  800.